package org.csu.mypetstore.domain;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

public class Order {
    private int orderId;
    private String username;
    private Date orderDate;
    private String shipAddress1;
    private String shipAddress2;
    private String shipCity;
    private String shipState;
    private String shipZip;
    private String shipCountry;
    private String billAddress1;
    private String billAddress2;
    private String billCity;
    private String billState;
    private String billZip;
    private String billCountry;
    private String courier;
    private BigDecimal totalPrice;
    private String billToFirstName;
    private String billToLastName;
    private String shipToFirstName;
    private String shipToLastName;
    private String creditCard;
    private String expiryDate;
    private String cardType;
    private String locale;
    private String status;
    private String alipayOutTradeNo;
    private List<LineItem> lineItems = new ArrayList<LineItem>();

    public final static String STATUS_UNPAID = "U";
    public final static String STATUS_AWAITING = "P";
    public final static String STATUS_INTRANSIT = "D";
    public final static String STATUS_FINISHED = "F";

    public String getAlipayOutTradeNo() {
        return alipayOutTradeNo;
    }

    public void setAlipayOutTradeNo( String alipayOutTradeNo ) {
        this.alipayOutTradeNo = alipayOutTradeNo;
    }

    public int getOrderId() {
        return orderId;
    }

    public void setOrderId( int orderId ) {
        this.orderId = orderId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername( String username ) {
        this.username = username;
    }

    public Date getOrderDate() {
        return orderDate;
    }

    public void setOrderDate( Date orderDate ) {
        this.orderDate = orderDate;
    }

    public String getShipAddress1() {
        return shipAddress1;
    }

    public void setShipAddress1( String shipAddress1 ) {
        this.shipAddress1 = shipAddress1;
    }

    public String getShipAddress2() {
        return shipAddress2;
    }

    public void setShipAddress2( String shipAddress2 ) {
        this.shipAddress2 = shipAddress2;
    }

    public String getShipCity() {
        return shipCity;
    }

    public void setShipCity( String shipCity ) {
        this.shipCity = shipCity;
    }

    public String getShipState() {
        return shipState;
    }

    public void setShipState( String shipState ) {
        this.shipState = shipState;
    }

    public String getShipZip() {
        return shipZip;
    }

    public void setShipZip( String shipZip ) {
        this.shipZip = shipZip;
    }

    public String getShipCountry() {
        return shipCountry;
    }

    public void setShipCountry( String shipCountry ) {
        this.shipCountry = shipCountry;
    }

    public String getBillAddress1() {
        return billAddress1;
    }

    public void setBillAddress1( String billAddress1 ) {
        this.billAddress1 = billAddress1;
    }

    public String getBillAddress2() {
        return billAddress2;
    }

    public void setBillAddress2( String billAddress2 ) {
        this.billAddress2 = billAddress2;
    }

    public String getBillCity() {
        return billCity;
    }

    public void setBillCity( String billCity ) {
        this.billCity = billCity;
    }

    public String getBillState() {
        return billState;
    }

    public void setBillState( String billState ) {
        this.billState = billState;
    }

    public String getBillZip() {
        return billZip;
    }

    public void setBillZip( String billZip ) {
        this.billZip = billZip;
    }

    public String getBillCountry() {
        return billCountry;
    }

    public void setBillCountry( String billCountry ) {
        this.billCountry = billCountry;
    }

    public String getCourier() {
        return courier;
    }

    public void setCourier( String courier ) {
        this.courier = courier;
    }

    public BigDecimal getTotalPrice() {
        return totalPrice;
    }

    public void setTotalPrice( BigDecimal totalPrice ) {
        this.totalPrice = totalPrice;
    }

    public String getBillToFirstName() {
        return billToFirstName;
    }

    public void setBillToFirstName( String billToFirstName ) {
        this.billToFirstName = billToFirstName;
    }

    public String getBillToLastName() {
        return billToLastName;
    }

    public void setBillToLastName( String billToLastName ) {
        this.billToLastName = billToLastName;
    }

    public String getShipToFirstName() {
        return shipToFirstName;
    }

    public void setShipToFirstName( String shipToFirstName ) {
        this.shipToFirstName = shipToFirstName;
    }

    public String getShipToLastName() {
        return shipToLastName;
    }

    public void setShipToLastName( String shipToLastName ) {
        this.shipToLastName = shipToLastName;
    }

    public String getCreditCard() {
        return creditCard;
    }

    public void setCreditCard( String creditCard ) {
        this.creditCard = creditCard;
    }

    public String getExpiryDate() {
        return expiryDate;
    }

    public void setExpiryDate( String expiryDate ) {
        this.expiryDate = expiryDate;
    }

    public String getCardType() {
        return cardType;
    }

    public void setCardType( String cardType ) {
        this.cardType = cardType;
    }

    public String getLocale() {
        return locale;
    }

    public void setLocale( String locale ) {
        this.locale = locale;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus( String status ) {
        this.status = status;
    }

    public List<LineItem> getLineItems() {
        return lineItems;
    }

    public void setLineItems( List<LineItem> lineItems ) {
        this.lineItems = lineItems;
    }

    public void initOrder( Account account, Cart cart ) {

        username = account.getUsername();
        orderDate = new Date();

        shipToFirstName = account.getFirstName();
        shipToLastName = account.getLastName();
        shipAddress1 = account.getAddress1();
        shipAddress2 = account.getAddress2();
        shipCity = account.getCity();
        shipState = account.getState();
        shipZip = account.getZip();
        shipCountry = account.getCountry();

        billToFirstName = account.getFirstName();
        billToLastName = account.getLastName();
        billAddress1 = account.getAddress1();
        billAddress2 = account.getAddress2();
        billCity = account.getCity();
        billState = account.getState();
        billZip = account.getZip();
        billCountry = account.getCountry();

        creditCard = "999 9999 9999 9999";
        expiryDate = "12/03";
        cardType = "Visa";
        courier = "UPS";
        locale = "CA";
        status = STATUS_UNPAID;

        Iterator<CartItem> i = cart.getAllCartItems();
        while ( i.hasNext() ) {
            CartItem cartItem = (CartItem) i.next();
            System.out.println(cartItem.getItem().getItemId() + "总价为" + cartItem.getTotal());
            addLineItem( cartItem );
        }

        totalPrice = cart.getSubTotal();
        System.out.println("totalPrice=" + totalPrice);

    }

    public void addLineItem( CartItem cartItem ) {
        LineItem lineItem = new LineItem( lineItems.size() + 1, cartItem );
        lineItem.setQuantity( cartItem.getCartQuantity() );
        lineItem.calculateTotal();
        addLineItem( lineItem );
    }

    public void addLineItem( LineItem lineItem ) {
        lineItems.add( lineItem );
    }

    public int getLineItemNumber(){
        return lineItems.size();
    }

    @Override
    public String toString() {
        return "Order{" +
                "orderId=" + orderId +
                ", username='" + username + '\'' +
                ", orderDate=" + orderDate +
                ", shipAddress1='" + shipAddress1 + '\'' +
                ", shipAddress2='" + shipAddress2 + '\'' +
                ", shipCity='" + shipCity + '\'' +
                ", shipState='" + shipState + '\'' +
                ", shipZip='" + shipZip + '\'' +
                ", shipCountry='" + shipCountry + '\'' +
                ", billAddress1='" + billAddress1 + '\'' +
                ", billAddress2='" + billAddress2 + '\'' +
                ", billCity='" + billCity + '\'' +
                ", billState='" + billState + '\'' +
                ", billZip='" + billZip + '\'' +
                ", billCountry='" + billCountry + '\'' +
                ", courier='" + courier + '\'' +
                ", totalPrice=" + totalPrice +
                ", billToFirstName='" + billToFirstName + '\'' +
                ", billToLastName='" + billToLastName + '\'' +
                ", shipToFirstName='" + shipToFirstName + '\'' +
                ", shipToLastName='" + shipToLastName + '\'' +
                ", creditCard='" + creditCard + '\'' +
                ", expiryDate='" + expiryDate + '\'' +
                ", cardType='" + cardType + '\'' +
                ", locale='" + locale + '\'' +
                ", status='" + status + '\'' +
                ", lineItems=" + lineItems +
                '}';
    }
}
